Query language to traverse a path in a graph

ABSTRACT

A query language used to traverse a path in a graph-based model is provided. The system comprises a parsing module to parse a query comprising query phrases. The respective query phrases composed of an object-type identifier and a filter where the object-type identifier corresponds to respective repositories and the filter is used to identify at least a portion of the objects associated with the object-type in the respective repositories. A planning module identifies the respective repositories corresponding to the object-type identifier within each of the one or more query phrases and generates an execution plan describing data to be retrieved according to the respective repositories and results of a preceding query phrase within the query. A translation module translates the respective query phrases into respective translated queries that are readable by the respective repositories and including the filter. An execution module implements the execution plan using the translated queries.

A portion of the disclosure of this patent document contains materialthat is subject to copyright protection. The copyright owner has noobjection to the facsimile reproduction by anyone of the patent documentor the patent disclosure, as it appears in the Patent and TrademarkOffice patent files or records, but otherwise reserves all copyrightrights whatsoever. The following notice applies to the software and dataas described below and in the drawings that form a part of thisdocument: Copyright eBay, Inc, 2012, All Rights Reserved.

RELATED APPLICATION

This application is a continuation of U.S. patent application Ser. No.13/626,636, filed Sep. 25, 2012, the benefit of priority of which isclaimed hereby, and which is incorporated herein by reference in itsentirety.

TECHNICAL HELD

The present application relates generally to the technical field ofnetwork communication and, in one specific example, to a query languageto traverse a path in a graph.

BACKGROUND

In a datacenter environment, many resources may be used to providevarious services via, for example, a web site. The resources may includehardware resources and software resources executed by the hardwareresources. The resources may each be associated with metadata stored invarious repositories distributed across a number of datacenters.Processing queries about the metadata may require accessing multiplerepositories. Typically, a query system might join two or more datastructures determine the results of the query. However, this process isresource-consuming and time consuming. Further, repositories havingdiverse data structures cannot be joined so certain queries cannot beprocessed.

BRIEF DESCRIPTION OF THE DRAWINGS

Some embodiments are illustrated by way of example and not limitation inthe figures of the accompanying drawings in which:

FIG. 1 is a diagram depicting content management system (CMS) data thatmay be queried, within which one example embodiment may be deployed.

FIG. 2 is a block diagram of an example query engine, according tovarious embodiments.

FIG. 3 is a flowchart illustrating an example method, according tovarious embodiments,

FIG. 4 is a diagram depicting an example of query processing, accordingto an example embodiment,

FIG. 5 is the diagram of FIG. 1 depicting execution of a query,according to the example embodiment of FIG. 4.

FIG. 6 is a diagrammatic representation of machine in the example formof a computer system within which a set of instructions, for causing themachine to perform any one or more of the methodologies discussedherein, may be executed.

DETAILED DESCRIPTION

Example methods and systems to use a query language to traverse a pathin a graph are described. In the following description, for purposes ofexplanation, numerous specific details are set forth in order to providea thorough understanding of example embodiments. It will be evident,however, to one skilled in the art that the present invention may bepracticed without these specific details. The terms “node” and “object”are used interchangeably herein.

In a datacenter, or other computing environment, metadata describinginstances of hardware or software may be stored in several locations andin several incompatible formats. Typically, to determine an answer to aquery that requires data from more than one table, a user may executeone or more computationally-expensive table joins or may run separatequeries on each table and manually combine and filter the results.

A query language is introduced that allows a network administrator toquery multiple tables residing on diverse database platforms using asingle query and avoiding database joins. The diverse database platformsmay use diverse languages and structures to maintain the data.Accordingly, one or more of the methodologies discussed herein mayobviate a need for computationally intensive queries and database joins,which may have the technical effect of reducing computing resources usedby one or more devices within the system. Examples of such computingresources include, without limitation, processor cycles, networktraffic, memory usage, storage space, and power consumption.

The query language is used to traverse tree or graph based model using adeclarative approach. Some embodiments may be used with non-relationaldatabase. At each stage of the query processing, the relevant resultsmay be filtered or sorted and returned for further processing. Theresult of the query may be translated into a traditional database.

FIG. 1 is a diagram depicting a graph-based model of content managementsystem (CMS) data 100 that may be queried. The CMS data may describehardware and software resources as nodes or objects within a largecomputing environment such as a cloud computing environment. The CMSdata 100 depicts nodes that are each associated with an Object-type. TheObject-type of the node describes the type of the node. Object-typesinclude, for example, environment, cluster, compute, interface,application service, group, and service instance. For each object-type,a repository stores records describing the nodes of that object-type.Each repository can be queried using a database-specific query. Examplesof nodes include a high-level environment node 102 describing a logicalgroup including secondary nodes for clusters 104 of the object-typecluster and comp-iq 108 of the object-type application services. Thecluster node 104 may describe a separate logical group of subnodes 106corresponding to discrete compute units (e.g., hardware resources usedto compute data such as servers or processors) of object-type compute.The respective compute unit nodes 106 may further describe logicalgroups of other hardware resources associated with the respectivecompute unit such as interfaces (e.g., network interface controllers(NICs)).

Likewise, the application service node 108 may describe two types oflogical groups. The first of these logical groups being object-typesservice instances such as instances 110 which, in turn, are associatedwith the compute unit 106 that is executing the respective serviceinstance. The second of these logical groups is of the object-typegroups that further describe groups as sub-groups of the groups. Asdepicted, a group instance may be columns 112 associated with groupinstances Column 1 114 and Column 2 114. These group instances may, inturn, describe the instances 110 associated with each respective group.

At each node, the data describing the logical group associated with eachnode (e.g., the subnodes of the node or parent nodes of the node) isstored in a repository that may or may not be shared with other nodes ofthe same or different object-type. The repository may be structuredindependently of the other repositories. Repositories can exist ondifferent database platforms, including but not limited to traditionalRDBMS's (e.g. MySQL, Oracle), column databases (e.g. Cassandra, HBase),document databases (e.g. MongoDB, CouchDB), etc.

The relationships between the nodes are depicted by one-way arrows inFIG. 1. The relationships indicate which logical groups are exposed bythe record of the node in the repository. The relationships may bemany-to-one, one-to-many, or recursive. One example of a many-to-onerelationship included in FIG. 1 is the relationship labelled environment“ENV” between each of nodes 104 and 108 to node 102. The one-to-manyrelationships of FIG. 1 are depicted using the suffix “[ ]”. Forexample, the node 104 is associated with a one-to-many relationshiplabelled “COMPUTES[ ]” to each compute node 106 within the clusterdescribed by node 104. A recursive relationship may be used to traversethe graph in reverse. Examples of recursive relationships in FIG. 1 arelabelled “CLUSTER”, “APPSERVICE”, and “PARENTGROUP”. In the example ofrecursive relationship labelled “APPSERVICE”, the node 110 labelled“SERVICE INSTANCE” may include a application service node 108“APPLICATION SERVICE”.

FIG. 2 is a block diagram of an example query engine 200, according tovarious embodiments. The query engine 200 is implemented as a system inhardware and/or software to receive a query and to provide an executionplan based on information about the various repositories.

The query engine 200 includes a metadata manager 202 that accesses ametadata database 204. The metadata database 204 stores recordsidentifying each repository where the data for each node in the CMS dataof FIG. 1 is stored. The metadata database 204 may further includerecords identifying the language or structure of the respectiverepositories.

A parsing module 206 is configured to receive the query and to analyzethe query, made of a sequence of words, numbers, characters, andpunctuation marks, to determine its grammatical structure with respectto the syntax described herein. The syntax includes a series of queryphrases that are each used to identify anode and dictate a filter orrelationship to apply to the node. The query may span multiple nodes andso include multiple phrases. A query may not traverse the same nodetwice. In some instances, a single query phrase may be used to traversemore than one node.

The master syntax used to structurer queries is as follows:

<store-type> “://” <anchor-type> <match-filter> <output- control> { “.”<output-flag><relation-attribute><match- filter> <output-control> }

A query begins with a “store-type” that indicates the collection of datato be queried. In the examples described herein, the collections arelabelled “wisb” (“way it should be”) and “wiri” (“way it really is”).Additional or alternative collections may be queried based on themetadata stored in the metadata database 204.

The query then includes the characters “://” and concludes with one ormore query phrases. The query phrase begins with the identification ofan object type. Each node in the CMS is associated with an object-type.The first query phrase of the query identifies the object-type of theanchor node, labelled “anchor-type”, from which the graph traversalbegins. The second portion of each query phrase is optional andindicates a desired attribute filter or relationship to other objectsand is indicated by curly brackets, square brackets, or parenthesis. Thequery phrases are separated by a separator such as the “.” character.

Subsequent query phrases within the query identify further nodes to betraversed according to object-type, referred to as “match-filters”because they operate to filter out match objects immediately preceding afilter in the second portion of the query phrase. At least one queryphrase in a query is referred to as an “output-control” because itdictates the objects to be returned to the user.

The second portion of each query phrase is optional and may bedesignated using curly brackets (as depicted by the master syntax),square brackets, and/or parenthesis. The second portion of the queryphrase includes a filter or relationship to another object by which tofilter the objects at the node identified by the first portion of thequery phrase. Various operations may be included in the second portion.Example operators that may be used are shown in Table I where the secondportion of the query phrase is set off using square brackets in theexamples. Attribute names recorded in the metadata are identified usingthe character “@” and “*” acts as a wildcard character.

TABLE 1 OPERATORS DESCRIPTION EXAMPLE = != < > <= >= comparison [@name =“foo”] =~ regular expression match [@name =~ “{circumflex over ( )}s.*”]( ) grouping [(@cpu > 35)] and or combinatorial [(@name = “foo”) and(@healthStatus = “healthy”)] In list membership. To be [“1.0” in@versions] used on a list of values, not a list of objects. Not boolean[not (“1.0” in @versions)]

If an object-type other than the final object-type in the query isdesired as the objects to be returned, the “output-control” objects maybe designated within the second portion of the query phrase using theoutput-flag indicated by the operator “*”,

Example queries are included below to demonstrate how queries may beconstructed

TABLE 2 Expression Description wiri://Group[@name = “comp-iq”] matchesall Groups whose name is ‘comp-iq’ in the wiri store wisb://Group[@name=~ “{circumflex over ( )}comp.*”] matches all Groups who name beginswith ‘comp’ in the wisb store wisb://Group matches all Group objectswiri://ServiceInstance[(@name =~ matches all ServiceInstance objects“{circumflex over ( )}foo.*”) and (@healthStatus = who name is prefixedby ‘foo’ and “healthy”)] contains an attribute ‘healthStatus’ with valueof ‘healthy’ wiri://ServiceInstance[@healthStatus] matches allServiceInstance objects with any healthStatus. ServiceInstances withoutthe ‘healthStatus’ attribute will not be returned

TABLE 3 wisb://ApplicationService[‘v2’ in @versions] matches allApplicationService instances where the list property ‘versions’ containsan element of value ‘v2’ wiri://ApplicationService.groups[@name =returns list of groups referenced by “comp-iq”] AppService:comp-iqwiri://ApplicationService.groups[@name = same as above, but explicitlyspecifying objects to “comp-iq”](*) return via ‘(*)’ operatorwiri://ApplicationService.groups(@name = same as above, only return the‘name’ and “comp-iq”)(@name,@lastUpdated) ‘lastUpdated’ attributeswithin the object wiri://ApplicationService(*).groups[@name = samematches as above, but return both “comp-iq”](*) ApplicationServices andGroups wisb://Compute(*).interfaces[@mac = matches all NodeServiceinstances where any “00:21:28:A3:07:1A”] interface has a mac addressvalue that matches “00:21:28:A3:07:1A. Note that only the Computeobjects are returned, not the objects referenced by interfaceswiri://ApplicationService[@name = return service instances under column1 of comp-iq “comp-iq”].groups[@name = “columns”].groups[@name =“col1”].serviceInstances wiri://ApplicationService[@name = return allrows were at least 1 service instance is “comp-iq”].groups[@name =failed “rows”].groups(*).serviceInstances[@healthStatus = “failed”]

The parsing module 206, upon parsing the query, generates an abstractsyntax tree (AST). The AST is a tree representation of the abstractsyntactic structure of query written in a programming language. Eachnode of the tree denotes a construct occurring in the execution of thequery. The AST indicates the objects to be returned to the user.

A planning module 208 is configured to evaluate the AST and determine ifany of the nodes within the query can be combined or embedded withinother nodes, for example, by virtue of sharing an object-type. Theplanning module 208 may request that the metadata manager 202 retrieverecords from the metadata database 204 corresponding to the identifiednode. The record includes a description of the database structure andlanguage. When the structure and language of the respective repositoryis known, the planning module 208 makes a determination based on whethertwo or more consecutive query phrases may be evaluated by accessing datastored in the same repository or if the respective repositories arewritten in the same query language with the same structure. The planningmodule 208 may also, for example, improve the order of the queries,rewrite some queries, or cache query results.

A translation module 210 is configured to identify a repository storingrecords about the node identified in the first portion of the queryphrase. The translation module 210 may request that the metadata manager202 retrieve records from the metadata database 204 corresponding to theidentified node. The record includes a description of the databasestructure and language. When the structure and language of therespective repository is known, the query phrases are translated intothe language of the repository.

The planning module 208 and the translation module 210 may operate inparallel or in serial during operation. The output of the planningmodule 208 and the translation module 210 is an execution plan thatdescribes the actions to be performed to obtain the results of thequery. The execution plan identifies each repository to be accessed andthe queries to run on each repository. The execution plan furtherindicates how the results of each query run on each repository are to becombined, filtered, sorted, or otherwise operated on to achieve thedesired results.

An execution module 212 is configured to implement the execution plan.The execution module 212 may access with the repositories correspondingto each node in the query or may communicate with repository managersthat access the respective repositories. The execution module 212 mayrun the queries in a sequence defined by the execution plan or inanother order. In some instances, the execution module 212 may operateon the results of each search corresponding to a query phrase beforeproceeding to the next search corresponding to the next query phrase. Inother instances, the execution module 212 may run multiple queries inparallel and operate on the results of those queries.

FIG. 3 is a flowchart illustrating an example method 300, according tovarious embodiments. The method 300 may be performed by the query engine200.

In an operation 302, the query is received from the user. The queryspecifies the collection to be searched and includes one or more queryphrases identifying an object-type and filter to apply to theobject-type. In an operation 304, the query is parsed and an AST isgenerated. The AST is used, in an operation 306, to plan the executionof the query. The planning may be based on the respective repositoriesto be accessed, the language that a query phrase is translated into toquery the repositories, and the like. The query, or portions thereof, istranslated in an operation 308. Operations 306 and 308 may be performedas a combined operation, in reverse order, or in other variations. Theoutput of the operations 306 and 308 is an execution plan. In anoperation 310, the execution plan is implemented and the results of thequery are returned to the user.

FIG. 4 is a diagram depicting an example of query processing, accordingto various embodiments. The diagram depicts an example of how an examplequery might be parsed, planned, translated, and executed in operation.This illustration is provided as an example with the understanding thatother queries may be parsed, planned, translated, and executeddifferently depending on the query. FIG. 5 is the diagram of FIG. 1depicting execution of the query according to the example embodiment ofFIG. 4. The two figures are discussed concurrently to provide a detailedexplanation of how the query is processed.

The submitted query 402 is given generically as:

-   -   COLLECTION://A[FILTER 1].B[FILTER 2].C[FILTER 3].D[FILTER 4]        where “collection” identifies the collection to be queried in a        system having more than one collection of CMS data. The query        402 includes four query phrases separated by a “.”. Each query        phrase identifies an object 404 or node to be interrogated        (e.g., nodes A, B, C, and D) in a first portion and a filter 406        or relationship to apply to the node (e.g., filters 1, 2, 3, and        4) in a second portion. The query 402 corresponds in structure        to the actual query:

 wiri://ApplicationService[@name = “comp-iq”].groups[@name = “columns”].groups{*}.serviceInstances[@healthStatus = “failed”]where “wiri://” identifies the collection to be searched.“ApplicationService”, “groups”, and “service instances” identifyobject-types in the CMS data in the first portion of the query phrases.In the second portion of the query phrases, there are filters and anoutput flag (“{*}”) to be applied to the object types.

The query path begins at the “anchor object-type A”, or in the aboveexample, at an ApplicationService object-type such as node 108. Becausethe CMS data 100 may include many nodes of the object-type,“ApplicationService” (not depicted), the anchor node is followed by thefilter “FILTER 1” in square brackets to identify the specific anchornode (or nodes). In the actual query, the filter 206 Filter 1corresponds to “[@name=“comp-iq”]” indicating that only the nodes of theobject-type application services and named “comp-iq” be returned.

The ApplicationService object-type 404 may be stored in a firstrepository according to a first structure and language. The query engine200 parses the first query phrase, identifies the first repository andfirst structure and language of the first repository based on metadatastored in the metadata database 204. The planning module 208 determineshow to structure the query within the first repository and thetranslation module 210 translates the query phrase into a query that isexecutable within the first repository. The results of running thisfirst query are the instance IDs (e.g., nodes named “comp-iq”) of thenodes of object-type B found in the first repository.

For the query phrases “B[FILTER 2].C[FILTER 3]” that correspond to theactual query phrases “groups[@name=“columns”].groups{*}”, the planningmodule 208 may determine that both are of the “groups” object-types andare stored in the same repository or in the same data structure orlanguage. The planning module 208, in conjunction with the translationmodule 210, determines that object C is embedded into object B. Thus,the second and third query phrases can be combined or manipulated toreduce the number of queries made to the repository.

The instance IDs returned from the first search of the first repositoryare passed to a search system running a search on the second repository.The object-type B “groups” associated with the ApplicationServiceobject-type named “com-iq” is filtered by the objects named “columns”using the filter 406 filter 2 tree. The object-type C “groups” is notfiltered but is followed by an output flag. The output flag indicatedthat objects within this group are the desired outputs. When these twoquery phrases are evaluated, the filter 406 filter 3 tree returns a listof the nodes 114 of the group “Columns” 112 that are associated with theApplicationService object-type named “com-iq”.

The final query phrase, “serviceInstances[@healthStatus=“failed”]” actsas a match-filter on the nodes 114 returned from the group objects. Theidentified service instances belong to at least one group within thebroader group “Columns” are filtered by filter 406 filter 4 treeaccording to the attribute “healthstatus” being “failed”. The output ofthe query engine 200 is a list of the columns where at least one serviceinstance has failed.

Modules, Components and Logic

Certain embodiments are described herein as including logic or a numberof components, modules, or mechanisms. Modules may constitute eithersoftware modules (e.g., code embodied (1) on a non-transitorymachine-readable medium or (2) in a transmission signal) orhardware-implemented modules. A hardware-implemented module is tangibleunit capable of performing certain operations and may be configured orarranged in a certain manner. In example embodiments, one or morecomputer systems (e.g., a standalone, client or server computer system)or one or more processors may be configured by software (e.g., anapplication or application portion) as a hardware-implemented modulethat operates to perform certain operations as described herein.

In various embodiments, a hardware-implemented module may be implementedmechanically or electronically. For example, a hardware-implementedmodule may comprise dedicated circuitry or logic that is permanentlyconfigured (e.g., as a special-purpose processor, such as a fieldprogrammable gate array (FPGA) or application-specific integratedcircuit (ASIC)) to perform certain operations. A hardware-implementedmodule may also comprise programmable logic or circuitry (e.g., asencompassed within a general-purpose processor or other programmableprocessor) that is temporarily configured by software to perform certainoperations. It will be appreciated that the decision to implement ahardware-implemented module mechanically, in dedicated and permanentlyconfigured circuitry, or in temporarily configured circuitry (e.g.,configured by software) may be driven by cost and time considerations.

Accordingly, the term “hardware-implemented module” should be understoodto encompass a tangible entity, be that an entity that is physicallyconstructed, permanently configured (e.g., hardwired) or temporarily ortransitorily configured (e.g., programmed) to operate in a certainmanner and/or to perform certain operations described herein.Considering embodiments in which hardware-implemented modules aretemporarily configured (e.g., programmed), each of thehardware-implemented modules need not be configured or instantiated atany one instance in time. For example, where the hardware-implementedmodules comprise a general-purpose processor configured using software,the general-purpose processor may be configured as respective differenthardware-implemented modules at different times. Software mayaccordingly configure a processor, for example, to constitute aparticular hardware-implemented module at one instance of time and toconstitute a different hardware-implemented module at a differentinstance of time.

Hardware-implemented modules can provide information to, and receiveinformation from, other hardware-implemented modules. Accordingly, thedescribed hardware-implemented modules may be regarded as beingcommunicatively coupled. Where multiple of such hardware-implementedmodules exist contemporaneously, communications may be achieved throughsignal transmission (e.g., over appropriate circuits and buses) thatconnect the hardware-implemented modules. In embodiments in whichmultiple hardware-implemented modules are configured or instantiated atdifferent times, communications between such hardware-implementedmodules may be achieved, for example, through the storage and retrievalof information in memory structures to which the multiplehardware-implemented modules have access. For example, onehardware-implemented module may perform an operation, and store theoutput of that operation in a memory device to which it iscommunicatively coupled. A further hardware-implemented module may then,at a later time, access the memory device to retrieve and process thestored output. Hardware-implemented modules may also initiatecommunications with input or output devices, and can operate on aresource (e.g., a collection of information).

The various operations of example methods described herein may beperformed, at least partially, by one or more processors that aretemporarily configured (e.g., by software) or permanently configured toperform the relevant operations. Whether temporarily or permanentlyconfigured, such processors may constitute processor-implemented modulesthat operate to perform one or more operations or functions. The modulesreferred to herein may, in some example embodiments, compriseprocessor-implemented modules.

Similarly, the methods described herein may be at least partiallyprocessor-implemented. For example, at least some of the operations of amethod may be performed by one or processors or processor-implementedmodules. The performance of certain of the operations may be distributedamong the one or more processors, not only residing within a singlemachine, but deployed across a number of machines. In some exampleembodiments, the processor or processors may be located in a singlelocation (e.g., within a home environment, an office environment or as aserver farm), while in other embodiments the processors may bedistributed across a number of locations.

The one or more processors may also operate to support performance ofthe relevant operations in a “cloud computing” environment or as a“software as a service” (SaaS). For example, at least some of theoperations may be performed by a group of computers (as examples ofmachines including processors), these operations being accessible via anetwork (e.g., the Internet) and via one or more appropriate interfaces(e.g., Application Program Interfaces (APIs).)

Electronic Apparatus and System

Example embodiments may be implemented in digital electronic circuitry,or in computer hardware, firmware, software, or in combinations of them.Example embodiments may be implemented using a computer program product,e.g., a computer program tangibly embodied in an information carrier,e.g., in a machine-readable medium for execution by, or to control theoperation of, data processing apparatus, e.g., a programmable processor,a computer, or multiple computers.

A computer program can be written in any form of programming language,including compiled or interpreted languages, and it can be deployed inany form, including as a stand-alone program or as a module, subroutine,or other unit suitable for use in a computing environment, A computerprogram can be deployed to be executed on one computer or on multiplecomputers at one site or distributed across multiple sites andinterconnected by a communication network.

In example embodiments, operations may be performed by one or moreprogrammable processors executing a computer program to performfunctions by operating on input data and generating output. Methodoperations can also be performed by, and apparatus of exampleembodiments may be implemented as, special purpose logic circuitry,e.g., a field programmable gate array (FPGA) or an application-specificintegrated circuit (ASIC).

The computing system can including clients and servers, A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other. Inembodiments deploying a (programmable computing system, it will beappreciated that that both hardware and software architectures requireconsideration. Specifically, it will be appreciated that the choice ofwhether to implement certain functionality in permanently configuredhardware (e.g., an ASIC), in temporarily configured hardware (e.g., acombination of software and a programmable processor), or a combinationof permanently and temporarily configured hardware may be a designchoice. Below are set out hardware (e.g., machine) and softwarearchitectures that may be deployed, in various example embodiments.

Example Machine Architecture and Machine-Readable Medium

FIG. 6 is a block diagram of machine in the example form of a computersystem 600 within which instructions, for causing the machine to performany one or more of the methodologies discussed herein, may be executed.In alternative embodiments, the machine operates as a standalone deviceor may be connected (e.g., networked) to other machines. In a networkeddeployment, the machine may operate in the capacity of a server or aclient machine in server-client network environment, or as a peermachine in a peer-to-peer (or distributed) network environment. Themachine may be a personal computer (PC), a tablet PC, a set-top box(STB), a Personal Digital Assistant (PDA), a cellular telephone, a webappliance, a network router, switch or bridge, or any machine capable ofexecuting instructions (sequential or otherwise) that specify actions tobe taken by that machine. Further, while only a single machine isillustrated, the term “machine” shall also be taken to include anycollection of machines that individually or jointly execute a set (ormultiple sets) of instructions to perform any one or more of themethodologies discussed herein.

The example computer system 600 includes a processor 602 (e.g., acentral processing unit (CPU), a graphics processing unit (GPU) orboth), a main memory 604 and a static memory 606, which communicate witheach other via a bus 608. The computer system 600 may further include avideo display unit 610 (e.g., a liquid crystal display (LCD) or acathode ray tube (CRT)). The computer system 600 also includes analphanumeric input device 612 (e.g., a keyboard or a touch-sensitivedisplay screen), a user interface (UI) navigation device 614 (e.g., amouse), a disk drive unit 616, a signal generation device 618 (e.g., aspeaker) and a network interface device 620.

Machine-Readable Medium

The disk drive unit 616 includes a machine-readable medium 622 on whichis stored one or more sets of instructions and data structures (e.g.,software) 624 embodying or utilized by any one or more of themethodologies or functions described herein. The instructions 624 mayalso reside, completely or at least partially, within the main memory604 and/or within the processor 602 during execution thereof by thecomputer system 600, the main memory 604 and the processor 602 alsoconstituting machine-readable media.

While the machine-readable medium 622 is shown in an example embodimentto be a single medium, the term “machine-readable medium” may include asingle medium or multiple media (e.g., a centralized or distributeddatabase, and/or associated caches and servers) that store the one ormore instructions or data structures. The term “machine-readable medium”shall also be taken to include any tangible medium that is capable ofstoring, encoding or carrying instructions for execution by the machineand that cause the machine to perform any one or more of themethodologies of the present invention, or that is capable of storing,encoding or carrying data structures utilized by or associated with suchinstructions. The term “machine-readable medium” shall accordingly betaken to include, but not be limited to, solid-state memories, andoptical and magnetic media. Specific examples of machine-readable mediainclude non-volatile memory, including by way of example semiconductormemory devices, e.g., Erasable Programmable Read-Only Memory (EPROM),Electrically Erasable Programmable Read-Only Memory (EEPROM), and flashmemory devices; magnetic disks such as internal hard disks and removabledisks; magneto-optical disks; and CD-ROM and DVD-ROM disks.

Transmission Medium

The instructions 624 may further be transmitted or received over acommunications network 626 using a transmission medium. The instructions624 may be transmitted using the network interface device 620 and anyone of a number of well-known transfer protocols (e.g., HTTP). Examplesof communication networks include a local area network (“LAN”), a widearea network (“WAN”), the Internet, mobile telephone networks, Plain OldTelephone (POTS) networks, and wireless data networks (e.g., WiFi andWiMax networks). The term “transmission medium” shall be taken toinclude any intangible medium that is capable of storing, encoding orcarrying instructions for execution by the machine, and includes digitalor analog communications signals or other intangible media to facilitatecommunication of such software.

Although an embodiment has been described with reference to specificexample embodiments, it will be evident that various modifications andchanges may be made to these embodiments without departing from thebroader spirit and scope of the invention. Accordingly, thespecification and drawings are to be regarded in an illustrative ratherthan a restrictive sense. The accompanying drawings that form a parthereof, show by way of illustration, and not of limitation, specificembodiments in which the subject matter may be practiced. Theembodiments illustrated are described in sufficient detail to enablethose skilled in the art to practice the teachings disclosed herein.Other embodiments may be utilized and derived therefrom, such thatstructural and logical substitutions and changes may be made withoutdeparting from the scope of this disclosure. This Detailed Description,therefore, is not to be taken in a limiting sense, and the scope ofvarious embodiments is defined only by the appended claims, along withthe full range of equivalents to which such claims are entitled.

Such embodiments of the inventive subject matter may be referred toherein, individually and/or collectively, by the term “invention” merelyfor convenience and without intending to voluntarily limit the scope ofthis application to any single invention or inventive concept if morethan one is in fact disclosed. Thus, although specific embodiments havebeen illustrated and described herein, it should be appreciated that anyarrangement calculated to achieve the same purpose may be substitutedfor the specific embodiments shown. This disclosure is intended to coverany and all adaptations or variations of various embodiments.Combinations of the above embodiments, and other embodiments notspecifically described herein, will be apparent to those of skill in theart upon reviewing the above description.

1. A system comprising: a processor and executable instructionsaccessible on a computer-readable medium that, when executed, cause theprocessor to perform operations comprising: parsing a query into one ormore query phrases; and identifying a node for each of the one or morequery phrases, each node is associated with a repository; determiningthat two or more consecutive query phrases can be evaluated by accessinga single repository based on at least one common object-type that isshared by the node of the two or more consecutive query phrases;generating an execution plan identifying one or more repositories to beaccessed and the query phrase to run on the associated repositorywithout database joins; and implementing the execution plan, run eachquery phrase on the associated repository, and return a result to theuser without database join.
 2. The system of claim 1, wherein theoperations further comprise managing metadata describing the repository.3. The system of claim 1, wherein the operations further comprise ametadata database to store records describing the repository.
 4. Thesystem of claim 1, wherein the query further comprises an indication ofa collection to be queried.
 5. The system of claim 1, wherein the queryfurther comprises an output flag indicating the object-type of results.6. The system of claim 1, wherein each of the one or more query phrasesfurther comprise of a filter used to identify at least a portion ofmatched objects associated with the object-type in a respectiverepository.
 7. The system of claim 6, wherein the objects include aone-to-many relationship to other objects.
 8. The system of claim 6,wherein the objects include a recursive relationship to one otherobject.
 9. The system of claim 6, wherein the filter is based on arelationship between the object and at least one other object.
 10. Thesystem of claim 1, wherein the query follows a path through a graphmodel.
 11. The system of claim 10, wherein the path does not include anyinternal loops.
 12. A method comprising: parsing a query into one ormore query phrases; identifying a node for each of the one or more queryphrases, each node is associated with a repository; determining that twoor more consecutive query phrases can be evaluated by accessing a singlerepository based on at least one common object-type that is shared bythe node of the two or more consecutive query phrases; generating anexecution plan identifying one or more repositories to be accessed andthe query phrase to run on the associated repository without databasejoins; and implementing the execution plan, running each query phrase onthe associated repository, and returning a result to the user withoutdatabase join.
 13. The method of claim 12, wherein the query furthercomprises an indication of a collection to be queried.
 14. The method ofclaim 12, wherein the query includes an output flag indicating theobject-type of results returned.
 15. The method of claim 12, whereineach of the one or more query phrases comprised of a filter used toidentify at least a portion of matched objects associated with theobject-type in a respective repository.
 16. The method of claim 15,wherein the objects include a one-to-many relationship to other objects.17. The method of claim 15, wherein the objects include a recursiverelationship to one other object.
 18. The method of claim 12, whereinthe query follows a path through a graph model.
 19. The method of claim18, wherein the path does not include any internal loops.
 20. Anon-transitory machine-readable storage medium having instructionsembodied thereon, the instructions executable by a processor forperforming a method comprising: parsing a query into one or more queryphrases; identifying a node for each of the one or more query phrases,each node is associated with a repository; determining that two or moreconsecutive query phrases can be evaluated by accessing a singlerepository based on at least one common object-type that is shared bythe node of the two or more consecutive query phrases; generating anexecution plan identifying one or more repositories to be accessed andthe query phrase to run on the associated repository without databasejoins; and implementing the execution plan, running each query phrase onthe associated repository, and returning a result to the user withoutdatabase join.